#ifndef CHATFRAME_H
#define CHATFRAME_H

#include"../global.h"
#include"filemessage.h"
#include<QPainter>
#include <QMouseEvent>
#include <QTimer>

static QString qss = "QLabel {   border-radius: 5px; background-color: rgb(%1);}";

class MyLabel : public QLabel {
    Q_OBJECT
public:
    MyLabel(const bool b, const QString &c, QWidget *parent = nullptr)
        : QLabel(parent)
        , colour(b)
        , content(c)
    {
        QFont font("华文细黑", 12);
        font.setWeight(QFont::Light); // 设置为轻量级，这通常类似于细体
        this->setFont(font);

        setMargin(10);
        setAlignment(Qt::AlignJustify);//对齐模式
        setWordWrap(true);//文本自动换行
        setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//扩展模式
        setAutoFillBackground(true);
        setFont(this->font());
        setTextInteractionFlags(Qt::TextSelectableByMouse);
        setText(content);
        adjustSize();//自动调整大小


        if (colour){
            setStyleSheet(qss.arg("149,236,105"));
        }else{
            setStyleSheet(qss.arg("255,255,255"));
        }
    }

    QSize sizeHint() const override{
        static QRect textRect;
        QFontMetrics fm(this->font());
        textRect = fm.boundingRect(45, 20, width(), INT_MAX, Qt::TextWordWrap, content);
        return QSize(textRect.width() + 50, textRect.height() + 50);
    }
protected:
    void enterEvent(QEnterEvent *) override {
        // 进入区域，改变光标形状
        setCursor(Qt::IBeamCursor);
        if (colour){
            setStyleSheet(qss.arg("137,217, 97"));
        }else{
            setStyleSheet(qss.arg("235,235,235"));
        }
    }
    void leaveEvent(QEvent *) override {
        // 离开区域，恢复默认光标
        unsetCursor();
        setSty();
    }
private:
    bool colour;
    QString content;

    void setSty(){
        if (colour){
            setStyleSheet(qss.arg("149,236,105"));
        }else{
            setStyleSheet(qss.arg("255,255,255"));
        }
    }
};

/**********************************************
        讯飞星火的气泡框占用比我的少一半

        创建一个水平布局，并涨加QListWidget和一个弹簧
    **********************************************/

class ChatFrame : public QWidget
{
    Q_OBJECT
public:
    explicit ChatFrame(const QString&sender, const QString&c, const UserType&, const NewsType&, QWidget *parent = nullptr);
    ~ChatFrame();
    //创建时用模拟的方式返回大小
    QSize sizeHint() const override;

protected:
    //所有的绘制操作都要在这里完成
    void paintEvent(QPaintEvent *) override;
    void resizeEvent(QResizeEvent *event) override;

private:
    void initText();
    void initFile();

signals:
    void InterfaceUpdate(const QSize &size);

private:
    UserType userType;
    NewsType nt;
    QString content;
    QPixmap pixmap;
    QString sender;
    QWidget *label = nullptr;

    //文本显示的成员变量
    int textAllWidth;                      //文本总长度
    QPointF points[3];                   //三角形位置
    QColor green, white;              //气泡框颜色
};

#endif // CHATFRAME_H
